/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package Semaforo;

import BESA.ExceptionBESA;
import BESA.Kernell.Agent.Event.DataBESA;
import BESA.Kernell.Agent.Event.EventBESA;
import BESA.Kernell.Agent.GuardBESA;
import BESA.Kernell.Agent.StateBESA;
import BESA.Kernell.System.Directory.AgHandlerBESA;
import BESA.Log.ReportBESA;
import Data.ActionData;
import Data.SensorData;
import World.Behavior.UpdateGuard;
import java.util.List;
import mundo.*;
import static mundo.Tramo.UNIDIRECCIONAL;

/**
 *
 * @author Andres
 */
public class SensorGuardSemaforo extends GuardBESA {

    @Override
    public boolean funcEvalBool(StateBESA objEvalBool) {
        return true;
    }

    @Override
    public void funcExecGuard(EventBESA ebesa) {
        //System.out.println("SensorGuardSemaforo");
        SensorData data = (SensorData) ebesa.getData();
        EstadoSemaforo es = (EstadoSemaforo) this.getAgent().getState();
        Malla malla = data.getMalla();
        List<Cruce> cruces=malla.getListaCruces();
        DataBESA dataAction;
        
        if(es.getCruce()==null){
            es.setCruce(conseguirCruce(cruces));
            
            Cruce cruce=es.getCruce();
            Punto nuevoPunto=cruce.getInfIz();
            boolean mover=true;
            if (mover) {
            dataAction = new ActionData(this.getAgent().getAlias(), "move", nuevoPunto.getX(), nuevoPunto.getY());
            //es.setUbicacion(nuevoPunto);
            EventBESA event = new EventBESA(UpdateGuard.class.getName(), dataAction);
            AgHandlerBESA ah;
            try {
               ah = getAgent().getAdmLocal().getHandlerByAlias("WORLD");
               ah.sendEvent(event);
            } catch (ExceptionBESA e) {
               ReportBESA.error(e);
            }
            }      
            
            for (Cruce c : cruces){ 
                if(c.equals(cruce)){
                    c.setTramoActivo(cruce.getTramoActivo());
                }
            }
        }
        data.setMalla(malla);
        

    }
   
    public Cruce conseguirCruce(List<Cruce> c){
        int Busqueda=0;
        Cruce temp=null;
        //while(temp==null){
            for(Cruce curces: c){
                if(curces.getSemaforos()==Busqueda){
                    curces.addSemaforos();
                    temp=curces;
                    break;
                }
            }
            Busqueda+=1;
        //}
        return temp;
    }
    
}
